//
//  SelectCountryPage.swift
//  Uber
//
//  Created by 朱 桓 on 16/1/12.
//  Copyright © 2016年 zhu.huan. All rights reserved.
//

import UIKit

protocol SelectCountryPageDelegate {
    //代理方法，显示国际代码和区号
    func displayCountryCode(code: String, flag: String)
}

class SelectCountryPage: ZhBasePage,UITableViewDataSource,UITableViewDelegate {
    @IBOutlet weak var tableView: UITableView!
    var countrys:[CountryInfo]? // 所有的国家code和名字
    var headers:[String]? // 表头信息
    var dictDatas:[String:AnyObject]?
    var countryCodes:[String:AnyObject]?//国家区号
    var lastIndexPath:NSIndexPath? // 最后一次点击
    var delegate: SelectCountryPageDelegate?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.title = "选择国家/地区"
        
        setNavigationItem("取消", selector: "doBack", isRight: false)
        
        initCount()
        initDatas()
        initCountryPhone();
        
        // 创建一个重用的单元格
        self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "CellID")
        self.view.addSubview(self.tableView)
        
        self.tableView.reloadData()
    }
    
    /**
    *获取国家的方法
    */
    func initCount()
    {
        // 获取国家编码
        let arrCodes = NSLocale.ISOCountryCodes()
        let locale:NSLocale = NSLocale.currentLocale()
        var info:CountryInfo
        
        countrys = []
        
        for code in arrCodes {
            info = CountryInfo()
            info.code = code
            // 国家名称
            info.name = locale.displayNameForKey(NSLocaleCountryCode, value: code)
            
            countrys?.append(info)
        }
        
        // 国家排序
        countrys?.sortInPlace({ (arg1:CountryInfo, arg2:CountryInfo) -> Bool in
            return arg1.name.localizedCaseInsensitiveCompare(arg2.name) == NSComparisonResult.OrderedAscending
        })
        
        
    }
    
    /**
    * 获取表头和内容数据
    */
    func initDatas()
    {
        var firstLetter: String!
        var datas:[CountryInfo]!
        
        headers = []
        datas = []
        dictDatas = [:]
        
        for country in countrys! {
            firstLetter = FxString.firstCharactor(country.name)
            
            if !(headers!.contains(firstLetter)) {
                if datas.count > 0 {
                    dictDatas![headers!.last!] = datas
                }
                // 添加表头数据
                headers?.append(firstLetter)
                
                datas = []
            }
            
            datas.append(country)
        }
        
        dictDatas![headers!.last!] = datas
    }
    
    /**
    * 创建国家区号
    */
    func initCountryPhone()
    {
        
        countryCodes = ["AF":"93",  "AL":"355", "AS":"1",   "AD":"376", "AO":"244", "AI":"1",
            "AR":"54",  "AM":"374", "AW":"297", "AU":"61",  "AZ":"994", "BS":"1",   "BH":"973", "BD":"880",
            "BB":"1",   "BY":"375", "BE":"32",  "BZ":"501", "BJ":"229", "BM":"1" ,  "BT":"975", "VN":"84",
            "BA":"387", "BW":"267", "BR":"55",  "IO":"246", "BG":"359", "BF":"226", "BI":"257", "KH":"855",
            "CM":"237", "CA":"1",   "CV":"238", "KY":"345", "CF":"236", "TD":"235", "CL":"56",  "CN":"86",
            "CX":"61",  "CO":"57",  "KM":"269", "CG":"242", "CK":"682", "CR":"506", "HR":"385", "CU":"53" ,
            "CY":"537", "CZ":"420", "DK" :"45", "DJ":"253", "DM":"1",   "DO":"1",   "EC":"593", "EG" :"20",
            "SV":"503", "GQ":"240", "ER":"291", "EE":"372", "ET":"251", "FO":"298", "FJ":"679", "FI":"358",
            "FR":"33",  "GF":"594", "PF":"689", "GA":"241", "GM":"220", "GE":"995", "DE":"49",  "GH":"233",
            "GI":"350", "GR":"30",  "GL":"299", "GD":"1",   "GP":"590", "GU":"1",   "GT":"502", "GN":"224",
            "GW":"245", "GY":"595", "HT":"509", "HN":"504", "HU":"36",  "IS":"354", "IN":"91",  "ID":"62",
            "IQ":"964", "IE":"353", "IL":"972", "IT":"39",  "JM":"1",   "JP":"81",  "JO":"962", "KZ":"77",
            "KE":"254", "KI":"686", "KW":"965", "KG":"996", "LV":"371", "LB":"961", "LS":"266", "LR":"231",
            "LI":"423", "LT":"370", "LU":"352", "MG":"261", "MW":"265", "MY":"60",  "MV":"960", "ML":"223",
            "MT":"356", "MH":"692", "MQ":"596", "MR":"222", "MU":"230", "YT":"262", "MX":"52",  "MC":"377",
            "MN":"976", "ME":"382", "MS":"1",   "MA":"212", "MM":"95",  "NA":"264", "NR":"674", "NP":"977",
            "NL":"31",  "AN":"599", "NC":"687", "NZ":"64",  "NI":"505", "NE":"227", "NG":"234", "NU":"683",
            "NF":"672", "MP":"1",   "NO":"47",  "OM":"968", "PK":"92",  "PW":"680", "PA":"507", "PG":"675",
            "PY":"595", "PE":"51",  "PH":"63",  "PL":"48",  "PT":"351", "PR":"1",   "QA":"974", "RO":"40",
            "RW":"250", "WS":"685", "SM":"378", "SA":"966", "SN":"221", "RS":"381", "SC":"248", "SL":"232",
            "SG":"65",  "SK":"421", "SI":"386", "SB":"677", "ZA":"27",  "GS":"500", "ES":"34",  "LK":"94",
            "SD":"249", "SR":"597", "SZ":"268", "SE":"46",  "CH":"41",  "TJ":"992", "TH":"66",  "TG":"228",
            "TK":"690", "TO":"676", "TT":"1",   "TN":"216", "TR":"90",  "TM":"993", "TC":"1",   "TV":"688",
            "UG":"256", "UA":"380", "AE":"971", "GB":"44",  "US":"1",   "UY":"598", "UZ":"998", "VU":"678",
            "WF":"681", "YE":"967", "ZM":"260", "ZW":"263", "BO":"591", "BN":"673", "CC":"61",  "CD":"243",
            "CI":"225", "FK":"500", "GG":"44",  "VA":"379", "HK":"852", "IR":"98",  "IM":"44",  "JE":"44",
            "KP":"850", "KR":"82",  "LA":"856", "LY":"218", "MO":"853", "MK":"389", "FM":"691", "MD":"373",
            "MZ":"258", "PS":"970", "PN":"872", "RE":"262", "RU":"7",   "BL":"590", "SH":"290", "KN":"1",
            "LC":"1",   "MF":"590", "PM":"508", "VC":"1",   "ST":"239", "SO":"252", "SJ":"47",  "SY":"963",
            "TW":"886", "TZ":"255", "VE":"58",  "VG":"284", "VI":"340", "DZ":"213", "AG":"1",
            "AT":"43",  "AX":"248", "BV":"74",  "TL":"626", "TF":"260", "BQ":"599", "SX":"599", "HM":"334",
            "UM":"581", "AQ":"10",  "SS":"211", "EH":"732"]
    }
    
    /**
    *设置表头的大小
    */
    func numberOfSectionsInTableView(tableView: UITableView) -> Int
    {
        return headers!.count
    }
    
    /**
    *设置表格数据大小
    */
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        let key = headers![section]
        let datas = dictDatas![key] as! [CountryInfo]
        
        return datas.count
    }
    
    /**
    *设置表头文本
    */
    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return headers![section]
    }
    
    /**
    *设置单元格数据
    */
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let identify:String = "CellID"
        let cell = tableView.dequeueReusableCellWithIdentifier(identify, forIndexPath: indexPath) as UITableViewCell
        
        let key = headers![indexPath.section]
        let datas = dictDatas![key] as! [CountryInfo]
        let country = datas[indexPath.row]
        // 设置国家图片
        cell.imageView?.image = UIImage(named: country.code)
        cell.accessoryView = UIView()
        cell.accessoryType = .None
        // 设置国家名称
        cell.textLabel?.text = country.name
        
        return cell
    }
    
    /**
    *表视图索引
    */
    func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]?
    {
        var indexs:[String] = headers!
        //        var char:[CChar] = [0,0]
        //        for var i = 65; i < 65+26; ++i {
        //            char[0] = CChar(i)
        //            indexs.append(String.fromCString(char)!)
        //        }
        indexs.append("#")
        return indexs
    }
    
    func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
        // 去掉上次选中的状态
        if lastIndexPath != nil {
            let cell:UITableViewCell? = self.tableView.cellForRowAtIndexPath(lastIndexPath!)
            if cell != nil {
                cell?.accessoryView = UIView()
            }
        }
        
        return indexPath
    }
    
    /**
    *选中事件
    */
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
    {
        self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
        let cell:UITableViewCell? = self.tableView.cellForRowAtIndexPath(indexPath)
        
        cell!.accessoryView = UIImageView(image: UIImage(named: "back"))
        
        lastIndexPath = indexPath
        
        let key = headers![indexPath.section]
        let datas = dictDatas![key] as! [CountryInfo]
        let country = datas[indexPath.row]
    
        var temp:String = ""
        if let code = countryCodes![country.code] {
            temp = code as! String
        
        }
        ptLog("code: \(country.code), 区号: \(temp)");
        self.delegate?.displayCountryCode(country.code, flag: temp)
        self.doBack()
    }
    
    override func doBack()
    {
        self.dismissViewControllerAnimated(true
            , completion: nil)
    }
    
    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
    }
    
}
